import axios from 'axios';
import qs from 'qs';
import store from '../store/index'

//根据环境变量配置接口区分
switch (process.env.NODE_ENV) {
    case "development":
        //axios.defaults.baseURL = "https://wxyssmt.cn";//开发环境
        axios.defaults.baseURL = "http://39.104.74.183:21028";//开发环境
        break;
    case "test":
        axios.defaults.baseURL = "http://39.104.74.183:21028";//测试环境
        break;
    case "production":
        axios.defaults.baseURL = "http://39.104.74.183:21028";//生产环境
        break;
    // 250测试地址
    // case "development":
    //     //axios.defaults.baseURL = "https://wxyssmt.cn";//开发环境
    //     axios.defaults.baseURL = "http://172.16.2.250:21026";//开发环境
    //     break;
    // case "test":
    //     axios.defaults.baseURL = "http://172.16.2.250:21026";//测试环境
    //     break;
    // case "production":
    //     axios.defaults.baseURL = "http://172.16.2.250:21026";//生产环境
    //     break;
}
// 配置超时时间
axios.defaults.timeout = 10000;

//配置cors跨域允许携带资源凭证
//axios.defaults.withDirectives = true;

//设置POST请求头，告知服务器请求主体的数据格式（看服务器要求的格式）,可以不设置
//axios.defaults.headers.post["Content-Type"] = "application/x-www-form-urlencoded;charset=UTF-8";
axios.defaults.headers.post['Content-Type'] = 'application/json';
//axios.defaults.headers['Content-Type'] = "application/json";
axios.defaults.headers.put['Content-Type'] = 'application/json';
//把对象XXX=XXX&XXX=XXX变成x-www-form-urlencoded格式
//axios.defaults.transformRequest = data => qs.stringify(data);


// 设置请求拦截器
// 客户端发起请求——>请求拦截器——>服务器
// token校验(jwt)
// axios.defaults.headers.common["Abp.TenantId"] = TenantId;
// axios.defaults.headers.common["Authorization"] = Authorization;
// axios.interceptors.request.use(
//     config => {

//         //携带token,假设token存在本地
//         let TenantId = store.state.tenantId;//存在vuex中
//         let token = localStorage.getItem("token");
//         // let TenantId = localStorage.getItem("ID");

//         token && (config.headers.Authorization = token);
//         TenantId && (config.headers.common["Abp.TenantId"] = TenantId);
//         console.log(config);
//         return config
//     }, error => {
//         return Promise.reject(error)
//     });
axios.interceptors.request.use(
    config => {
        // const TenantId = store.state.tenantId;
        const Authorization = window.sessionStorage.getItem("token");
        //  console.log(TenantId);
        config.headers.common["Abp.TenantId"] = 1;
        config.headers.common["Abp-TenantId"] = 1;
        config.headers.Authorization = "bearer " + Authorization;
        //  TenantId && ();
        // console.log(config);
        return config
    }, error => {
        return Promise.reject(error)
    });



//响应拦截器
//服务器——>响应拦截器——>客户端

axios.interceptors.response.use(
    response => {
        //   console.log(response);
        if (response.status === 200) {
            return Promise.resolve(response);

        } else {
            //   console.log(response);
            return Promise.reject(response)
        }
    },
    error => {
        let { response } = error;
        // console.log(response);
        if (response) {
            //服务器返回结果,根据服务器来
            switch (response.status) {
                case 401://未登录，这里可以做弹窗，用组件库，也可以跳路由
                    break;
                case 403://token过期
                    break;
                case 404://找不到页面
                    break;
                case 500:
                    return Promise.resolve(response);
            }
        } else {
            //服务器没有返回结果
            // console.log(response);
            if (!window.navigator.onLine) {
                //断网处理：可以跳转到断网页面
                return
            }
            return Promise.reject(error);
        }
    }
)

export function post(url, params, json = true) {
    return new Promise((resolve, reject) => {
        axios.post(url, json ? JSON.stringify(params) : qs.stringify(params), { params: params })
            .then(res => {
                resolve(res.data)
            })
            .catch((err) => {
                reject(err)
            })
    })
}

export function get(url, param) {
    return new Promise((resolve, reject) => {
        axios.get(url, { params: param })
            .then(res => {
                resolve(res.data)
            })
            .catch((err) => {
                reject(err)
            })
    })
}


export function put(url, params, json = true) {
    return new Promise((resolve, reject) => {
        axios.put(url, json ? JSON.stringify(params) : qs.stringify(params), { params: params })
            .then(res => {
                resolve(res.data)
            })
            .catch((err) => {
                reject(err)
            })
    })
}

export function deletefn(url, params) {
    console.log(url);
    return new Promise((resolve, reject) => {
        axios.delete(url, params)
            .then(res => {
                resolve(res.data);
                // Loading.service(true).close();
                // Message({message: '请求成功', type: 'success'});
            })
            .catch(err => {
                reject(err.data)
                // Loading.service(true).close();
                // Message({ message: '加载失败', type: 'error' });
            })
    });
}
//封装get方法
// export function get(url, params){    
//     return new Promise((resolve, reject) =>{        
//         axios.get(url, {            
//             params: params        
//         }).then(res => {
//             resolve(res.data);
//         }).catch(err =>{
//             reject(err.data)        
//     })    
// });}

//封装post方法
// export function post(url, params = {}, json = false) {
//     return new Promise((resolve, reject) => {
//          axios.post(url, json ? JSON.stringify(params) : QS.stringify(params),{

//           })
//         .then(res => {
//             resolve(res.data);
//         })
//         .catch(err =>{
//             reject(err.data)
//         })
//     });
// }
// export function HttpPost(url, params = {}, json = false) {
//     return new Promise((resolve, reject) => {
//          axios.post(url, json ? JSON.stringify(params) : QS.stringify(params),{

//           })
//         .then(res => {
//             resolve(res.data);
//         })
//         .catch(err =>{
//             reject(err.data)
//         })
//     });
// }
